//typedef struct {
//    Queue q1;
//    Queue q2;
//} MyStack;
//
//
//MyStack* myStackCreate() {
//    MyStack* pst = (MyStack*)malloc(sizeof(MyStack));
//    QueueInit(&pst->q1);
//    QueueInit(&pst->q2);
//    return pst;
//}
//
//void myStackPush(MyStack* obj, int x) {
//    if (!QueueEmpty(&obj->q1))
//    {
//        QueuePush(&obj->q1, x);
//    }
//    else
//    {
//        QueuePush(&obj->q2, x);
//    }
//}
//
//int myStackPop(MyStack* obj) {
//    Queue* emp = &obj->q1;
//    Queue* full = &obj->q2;
//    if (QueueEmpty(&obj->q2))
//    {
//        emp = &obj->q2;
//        full = &obj->q1;
//    }
//    while (QueueSize(full) > 1)
//    {
//        QueuePush(emp, QueueFront(full));
//        QueuePop(full);
//    }
//    int ret = QueueFront(full);
//    QueuePop(full);
//    return ret;
//}
//
//int myStackTop(MyStack* obj) {
//    if (!QueueEmpty(&obj->q1))
//    {
//        return QueueBack(&obj->q1);
//    }
//    else
//        return QueueBack(&obj->q2);
//}
//
//bool myStackEmpty(MyStack* obj) {
//    return QueueEmpty(&obj->q1) && QueueEmpty(&obj->q2);
//}
//
//void myStackFree(MyStack* obj) {
//    QueueDestroy(&obj->q1);
//    QueueDestroy(&obj->q2);
//    free(obj);
//    obj = NULL;
//}

//typedef struct {
//    ST push;
//    ST pop;
//} MyQueue;
//
//
//MyQueue* myQueueCreate() {
//    MyQueue* pq = (MyQueue*)malloc(sizeof(MyQueue));
//    STInit(&pq->push);
//    STInit(&pq->pop);
//    return pq;
//}
//
//void myQueuePush(MyQueue* obj, int x) {
//    StackPush(&obj->push, x);
//}
//
//int myQueuePop(MyQueue* obj) {
//    if (StackEmpty(&obj->pop))
//    {
//        while (!StackEmpty(&obj->push))
//        {
//            StackPush(&obj->pop, StackTop(&obj->push));
//            StackPop(&obj->push);
//        }
//    }
//    int ret = StackTop(&obj->pop);
//    StackPop(&obj->pop);
//    return ret;
//}
//
//int myQueuePeek(MyQueue* obj) {
//    if (StackEmpty(&obj->pop))
//    {
//        while (!StackEmpty(&obj->push))
//        {
//            StackPush(&obj->pop, StackTop(&obj->push));
//            StackPop(&obj->push);
//        }
//    }
//    return StackTop(&obj->pop);
//}
//
//bool myQueueEmpty(MyQueue* obj) {
//    return StackEmpty(&obj->push) && StackEmpty(&obj->pop);
//}
//
//void myQueueFree(MyQueue* obj) {
//    STDestroy(&obj->pop);
//    STDestroy(&obj->push);
//    free(obj);
//    obj = NULL;
//}